# @Time    :2025/4/16 8:59
"""
令z0=A0×B0
令z1=(A1+A0)×(B1+B0)
令z2= A1×B1
此时结果C=102m× z2 + 10m×(z1−z2−z0) + z0
"""


def kachubala(x, y):
    # 将两个数字 转换成字符串
    str_x = str(x)
    str_y = str(y)
    n = max(len(str_x), len(str_y))

    # 如果存在负数，将其转换成正数再调用kachubala
    if str_x[0] == "-":
        return -kachubala(-x, y)
    if str_y[0] == "-":
        return -kachubala(x, -y)

    # 如果只剩一位 返回返回乘积
    if n == 1:
        return x * y
    # 调用 一个方法 使长度一致
    str_x = str_x.zfill(n)
    str_y = str_y.zfill(n)

    # 计算分割点

    m = n // 2
    # 将数字转换成高位部分和低位部分
    high1, low1 = int(str_x[:-m], int(str_x[-m:]))
    high2, low2 = int(str_y[:-m], int(str_y[-m:]))

    # 递归调用kachubala
    z0 = kachubala(low1, low2)
    z1 = kachubala(low1 + high1, low2 + high2)
    z2 = kachubala(high1, high2)
    #此时结果C=102m× z2 + 10m×(z1−z2−z0) + z0

    return pow(10, 2 * m) * z2 + pow(10, m) * (z1 - z2 - z0) + z0
